jeg har en array af ints, og jeg skal bruge den som en byte array.
Grunden er at den skal i noget GZip ting ting (jeg har ikke helt styr på det)
kode:
- public void Save(Boolean Override = false)
- {
- string path = "levels/" + name + ".lvl";
-
- try
- {
- if (!Directory.Exists("levels")) Directory.CreateDirectory("levels");
-
- if (changed == true || !File.Exists(path) || Override)
- {
- FileStream fs = File.Create(path);
- GZipStream gs = new GZipStream(fs, CompressionMode.Compress);
-
- byte[] header = new byte[16];
- BitConverter.GetBytes(1874).CopyTo(header, 0);
- gs.Write(header, 0, 2);
-
- BitConverter.GetBytes(width).CopyTo(header, 0);
- BitConverter.GetBytes(height).CopyTo(header, 2);
- BitConverter.GetBytes(depth).CopyTo(header, 4);
- BitConverter.GetBytes(spawnx).CopyTo(header, 6);
- BitConverter.GetBytes(spawnz).CopyTo(header, 8);
- BitConverter.GetBytes(spawny).CopyTo(header, 10);
- header[12] = rotx; header[13] = roty;
- header[14] = (byte)permissionvisit;
- header[15] = (byte)permissionbuild;
- gs.Write(header, 0, header.Length);
- byte[] level = new byte[blocks.Length];
- for (int i = 0; i < blocks.Length; ++i)
- {
- if (blocks[i] < 80)
- {
- level[i] = blocks[i]; //her sker fejlen
- //gs.Write skal bruge byte[] og blocks[] er en int[],
- //blocks kan ikke ændres til byte[]
- //da den indeholder værdiger over 255, som 377
- }
- else
- {
- level[i] = Block.SaveConvert(blocks[i]);
- }
- } gs.Write(level, 0, level.Length); gs.Close();
- fs.Close();
-
- Server.s.Log("SAVED: Level \"" + name + "\". " + Player.players.Count + "/" + Server.players);
- changed = false;
- try
- {
- File.Copy(path, path + ".backup", true);
- Server.s.Log("And backed up");
- }
- catch
- {
- Server.s.Log("Failed to make backup");
- }
-
- fs.Dispose();
- gs.Dispose();
- }
- else
- {
- Server.s.Log("Skipping level save for " + name + ".");
- }
- }
- catch
- {
- Server.s.Log("FAILED TO SAVE :" + name);
- Player.GlobalMessage("FAILED TO SAVE :" + name);
- return;
- }
-
- GC.Collect();
- GC.WaitForPendingFinalizers();
- }
ville sådan noget som
- BitConverter.GetBytes(blocks[i]).CopyTo(level,i);
virke?
Jeg aner ikke hvordan BitConverter fungere <,<
nogen forslag til hvordan jeg får det her fixet?
eller nogen som vil sige at jeg spørger om noget komplet umuligt?
eller nogen som bare har lyst til at skrive noget?